package cmsapi

import (
	// "net/http"
	"encoding/json"
	"strconv"
	// "time"
	// "github.com/dgrijalva/jwt-go"
	"github.com/labstack/echo"
	"gopkg.in/mgo.v2/bson"
	// "github.com/jinzhu/gorm"
	
	"oxy_server/module/log"
	"oxy_server/model"
	"oxy_server/until"
)

type (
	tagprice struct {
		ID bson.ObjectId `json:"_id" bson:"_id"`
		ProductID 					string `json:"productid" bson:"productid"`
		StyleNumber 				string `json:"stylenumber" bson:"stylenumber"`
		Picture 					string `json:"picture" bson:"picture"`
		Name				 		string `json:"name" bson:"name"`
		Category					string `json:"category" bson:"category"`
		Cost 						string `json:"cost" bson:"cost"`
		Salecost 					string `json:"salecost" bson:"salecost"`
		Inventory 					string `json:"inventory" bson:"inventory"`
		ForecastSales 				string `json:"forecastsales" bson:"forecastsales"`
		SoldOutRate 				string `json:"soldoutrate" bson:"soldoutrate"`
		MarkupRate					string `json:"markuprate" bson:"markuprate"`
		RetailPrice 				string `json:"retailprice" bson:"retailprice"`
		ExchangeRate				string `json:"exchangerate" bson:"exchangerate"`
		SingleGrossProfit 			string `json:"singlegrossprofit" bson:"singlegrossprofit"`
		SingleGrossProfitRate		string `json:"singlegrossprofitrate" bson:"singlegrossprofitrate"`
		Sales 						string `json:"sales" bson:"sales"`
		ReturnQuantity  			string `json:"returnquantity" bson:"returnquantity"`
		ExchangeQuantity  			string `json:"exchangequantity" bson:"exchangequantity"`
		ReturnFee		  			string `json:"returnfee" bson:"returnfee"`
		ExchangeFee  				string `json:"exchangefee" bson:"exchangefee"`
		TTLGrossProfit  			string `json:"ttlgrossprofit" bson:"ttlgrossprofit"`
		TTLGrossProfitRate 			string `json:"ttlgrossprofitrate" bson:"ttlgrossprofitrate"`
		OrderValue  				string `json:"ordervalue" bson:"ordervalue"`
		PromotionRatio  			string `json:"promotionratio" bson:"promotionratio"`
		PromotionFee  				string `json:"promotionfee" bson:"promotionfee"`
		ValueBack  					string `json:"valueback" bson:"valueback"`
		TargetProfitReturnRate  	string `json:"targetprofitreturnrate" bson:"targetprofitreturnrate"`
	}
	inserttagprice struct {
		ProductID 					string `json:"productid" bson:"productid"`
		StyleNumber 				string `json:"stylenumber" bson:"stylenumber"`
		Picture 					string `json:"picture" bson:"picture"`
		Name				 		string `json:"name" bson:"name"`
		Category					string `json:"category" bson:"category"`
		Cost 						string `json:"cost" bson:"cost"`
		Salecost 					string `json:"salecost" bson:"salecost"`
		Inventory 					string `json:"inventory" bson:"inventory"`
		ForecastSales 				string `json:"forecastsales" bson:"forecastsales"`
		SoldOutRate 				string `json:"soldoutrate" bson:"soldoutrate"`
		MarkupRate					string `json:"markuprate" bson:"markuprate"`
		RetailPrice 				string `json:"retailprice" bson:"retailprice"`
		ExchangeRate				string `json:"exchangerate" bson:"exchangerate"`
		SingleGrossProfit 			string `json:"singlegrossprofit" bson:"singlegrossprofit"`
		SingleGrossProfitRate		string `json:"singlegrossprofitrate" bson:"singlegrossprofitrate"`
		Sales 						string `json:"sales" bson:"sales"`
		ReturnQuantity  			string `json:"returnquantity" bson:"returnquantity"`
		ExchangeQuantity  			string `json:"exchangequantity" bson:"exchangequantity"`
		ReturnFee		  			string `json:"returnfee" bson:"returnfee"`
		ExchangeFee  				string `json:"exchangefee" bson:"exchangefee"`
		TTLGrossProfit  			string `json:"ttlgrossprofit" bson:"ttlgrossprofit"`
		TTLGrossProfitRate 			string `json:"ttlgrossprofitrate" bson:"ttlgrossprofitrate"`
		OrderValue  				string `json:"ordervalue" bson:"ordervalue"`
		PromotionRatio  			string `json:"promotionratio" bson:"promotionratio"`
		PromotionFee  				string `json:"promotionfee" bson:"promotionfee"`
		ValueBack  					string `json:"valueback" bson:"valueback"`
		TargetProfitReturnRate  	string `json:"targetprofitreturnrate" bson:"targetprofitreturnrate"`
	}
)

func GetTagPriceListHandler(c echo.Context) error {
	currentpage,err := strconv.Atoi(c.QueryParam("currentpage"))
	perpage,err := strconv.Atoi(c.QueryParam("perpage"))
	jsonquery := c.QueryParam("like")
	if err != nil {
		log.Error("解析参数错误",err)
		c.JSON(403, map[string]interface{}{
			"msg":   "error",
		})
		return err		
	}
	model.DB().Dbname="OxyCms"
	model.DB().Document="tag_price"
	M, err := until.JsonToBson(jsonquery)
	if err != nil {
		log.Error("json-> bson 失败",err)
		c.JSON(403, map[string]interface{}{
			"msg":   "error",
		})
		return err		
	}
	query,count,err:=model.DB().Query(M, currentpage, perpage)
	if err != nil {
		log.Error("查询出错",err)
		c.JSON(404, map[string]interface{}{
			"msg":   "error",
		})
		return err		
	}
	ps:=[]tagprice{}
	query.All(&ps)
	str, err := json.Marshal(ps)
	if err != nil {
		log.Error("解析参数错误",err)
		c.JSON(403, map[string]interface{}{
			"msg":   "error",
		})
		return err		
	}
	c.JSON(200, map[string]interface{}{
		"msg":   "success",
		"data":string(str),
		"count":count,
	})

	return nil
}

func AddTagPriceHandler(c echo.Context) error {
	t:= &inserttagprice{}
	if err := c.Bind(t); err != nil {
		log.Error("解析参数错误",err)
		c.JSON(403, map[string]interface{}{
			"msg":   "error",
		})
		return err
	}
	model.DB().Dbname="OxyCms"
	model.DB().Document="tag_price"
	err:=model.DB().Insert(t)
	if err != nil {
		log.Error("插入出错",err)
		c.JSON(404, map[string]interface{}{
			"msg":   "error",
		})
		return err
	}
	c.JSON(200, map[string]interface{}{
		"msg":   "success",
	})

	return nil	
}
func UpdateTagPriceHandler(c echo.Context) error {
	id := c.QueryParam("id") 
	log.Info("UpdateTagPriceHandler",id)
	t:= &inserttagprice{}
	if err := c.Bind(t); err != nil {
		log.Error("解析参数错误",err)
		c.JSON(403, map[string]interface{}{
			"msg":   "error",
		})
		return err
	}
	model.DB().Dbname="OxyCms"
	model.DB().Document="tag_price"
	err:= model.DB().Update(bson.M{"_id":bson.ObjectIdHex(id)} , t)
	if err != nil{
		log.Error("更新出错",err)
		c.JSON(404, map[string]interface{}{
			"msg":   "error",
		})
		return err
	}
	c.JSON(200, map[string]interface{}{
		"msg":  "success",
	})

	return nil
}
func DelTagPriceHandler(c echo.Context) error {
	id := c.QueryParam("id")
	log.Info("DelTagPriceHandler",id)
	model.DB().Dbname="OxyCms"
	model.DB().Document="tag_price"
	err:=model.DB().Remove(bson.M{"_id":bson.ObjectIdHex(id)})
	if err != nil{
		log.Error("删除出错",err)
		c.JSON(404, map[string]interface{}{
			"msg":  "error",
		})
		return err
	}
	c.JSON(200, map[string]interface{}{
		"msg":  "success",
	})

	return nil
}